# import pandas as pd
# pd.set_option('display.unicode.east_asian_width',True)
# df=pd.read_excel('超市运营数据.xlsx')
# df['总额']=df['价格']*df["数量"]
# df=df.groupby('销售经理').agg({'总额':'sum'})
# df['排名']=df.rank(method='first',ascending=False)
# df.sort_values(by='排名',ascending=True,inplace=True)
# print(df)
# print(df.value_counts(subset='客户类型'))
# df['价格平均值']=df['价格'].mean()
# df['价格平均值']=df['价格'].max()
# df['价格平均值']=df['价格'].min()
# print(df)
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)   ##导入+文本尺寸调整

df = pd.read_excel('超市运营数据.xlsx')

##1.
##初始化一个空列表 data。然后遍历 df 中的每一行，
##检查“折扣”列的值。如果折扣为 0，则在 data 列表中添加 1；否则，添加实际的折扣值
data = []
for i in range(df['折扣'].size):
    if df['折扣'][i] == 0:
        data.append(1)
    else:
        data.append(df['折扣'][i])
##计算“总额”，等于“价格”乘以“数量”，再乘以上面创建的折扣数据，结果存储在 DataFrame df 的“总额”列中。
df['总额'] = df['价格'] * df['数量'] * data

##按“销售经理”对数据进行分组，并计算“总额”的总和，结果存储在 df1 中。
df1 = df.groupby('销售经理').agg({'总额': 'sum'})

##对 df1 中的“总额”列进行排名，排名规则是降序排列，得出的排名结果存储在“排名”列中。
df1['排名'] = df1.rank(method='first', ascending=False)
##按“排名”列升序排序 df1，即销售额排名靠前的销售经理排在前面。
df1.sort_values(by='排名', ascending=True, inplace=True)
print('按销售经理的销售额降序排名和升序排序：\n', df1)

##1-2.
#按“客户类型”进行分组，并计算每种客户类型的“总额”总和，结果存储在 df2 中。
df2 = df.groupby('客户类型').agg({'总额': 'sum'})

#对 df2 中的“总额”列进行排名，按照降序排序，并将结果存储在新列“排名”中。
df2['排名'] = df2.rank(method='first', ascending=False)

#对 df2 按“排名”列进行升序排序，以便排名高的客户类型靠前。
df2.sort_values(by='排名', ascending=True, inplace=True)
print('按客户名称的销售额降序排名和升序排序：\n', df2)

##2.
print('每个客户类型的总数：\n', df.value_counts('客户类型'))
print('价格的平均值：', df['价格'].mean())
print('价格的最大值：', df['价格'].max())
print('价格的最小值：', df['价格'].min())
##3.
df3 = pd.crosstab(index=df['客户类型'], columns=df['销售经理'])
print('客户类型和销售经理的交叉表:\n', df3)
##4.
df4 = pd.pivot_table(df, values='数量', index='计划发货天数', columns='折扣', aggfunc='sum')
print('计划发货天数、折扣和数量的透视表:\n', df4)
##5.
df5 = df[['计划发货天数', '价格', '数量', '折扣']]
print('计划发货天数、价格、数量和折扣之间的相关系数：\n', df5.corr())